package com.senlingspace.payment.douyin.bean.response;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * 查询门店信息的响应实体类，用于映射抖音API返回的数据结构。
 */
@Data
public class DouyinShopQueryResponse implements Serializable {

    /**
     * 包含门店数据及响应状态的容器对象。
     */
    @JsonProperty("data")
    private DataContainer data;

    /**
     * 额外的响应信息，例如错误码、请求ID等。
     */
    @JsonProperty("extra")
    private ExtraContainer extra;

    /**
     * 包含门店信息的主要数据容器。
     */
    @Data
    public static class DataContainer implements Serializable {

        /**
         * 门店信息列表。
         */
        @JsonProperty("pois")
        private List<ShopInfo> pois;

        /**
         * 返回的门店总数。
         */
        @JsonProperty("total")
        private int total;

        /**
         * 错误码，0表示成功，其他值表示具体错误类型。
         */
        @JsonProperty("error_code")
        private int errorCode;

        /**
         * 错误描述信息。
         */
        @JsonProperty("description")
        private String description;
    }

    /**
     * 封装单个门店及其所属账户的信息。
     */
    @Data
    public static class ShopInfo implements Serializable {

        /**
         * 门店的具体信息。
         */
        @JsonProperty("poi")
        private PoiInfo poi;

        /**
         * 门店所属的主账户信息。
         */
        @JsonProperty("root_account")
        private RootAccount rootAccount;
    }

    /**
     * 封装门店的详细信息。
     */
    @Data
    public static class PoiInfo implements Serializable {

        /**
         * 门店ID。
         */
        @JsonProperty("poi_id")
        private String poiId;

        /**
         * 门店名称。
         */
        @JsonProperty("poi_name")
        private String poiName;

        /**
         * 门店地址。
         */
        @JsonProperty("address")
        private String address;

        /**
         * 门店的纬度信息。
         */
        @JsonProperty("latitude")
        private double latitude;

        /**
         * 门店的经度信息。
         */
        @JsonProperty("longitude")
        private double longitude;
    }

    /**
     * 封装与门店关联的主账户信息。
     */
    @Data
    public static class RootAccount implements Serializable {

        /**
         * 主账户ID。
         */
        @JsonProperty("account_id")
        private String accountId;

        /**
         * 主账户名称。
         */
        @JsonProperty("account_name")
        private String accountName;
    }

    /**
     * 包含额外的响应信息，如日志ID和时间戳。
     */
    @Data
    public static class ExtraContainer implements Serializable {

        /**
         * 错误码，表示整体响应状态。
         */
        @JsonProperty("error_code")
        private int errorCode;

        /**
         * 错误的描述信息。
         */
        @JsonProperty("description")
        private String description;

        /**
         * 子错误码，进一步描述错误类型。
         */
        @JsonProperty("sub_error_code")
        private int subErrorCode;

        /**
         * 子错误描述信息。
         */
        @JsonProperty("sub_description")
        private String subDescription;

        /**
         * 请求的日志ID，用于追踪请求。
         */
        @JsonProperty("logid")
        private String logid;

        /**
         * 当前服务器时间的时间戳（毫秒）。
         */
        @JsonProperty("now")
        private long now;
    }
}
